/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package MiniProjet.gestionnaires;


import MiniProjet.modeles.Commande;
import MiniProjet.modeles.Film;
import MiniProjet.modeles.LigneCommande;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author SaLaH
 */
@Stateless
public class GestionnairePanier {
    
    @EJB
    private GestionnaireFilms gestionnaireFilms;
    
    private Commande commande;
    private Collection<LigneCommande> lignesCommandes;


     public GestionnairePanier() {
        this.lignesCommandes = new ArrayList<LigneCommande>();
    }

    public void addligneCommande(int filmId, int quantite) {
        LigneCommande ligneCommande = getligneCommandeByFilm(filmId);
        Film film = gestionnaireFilms.getFilmById(filmId);
        double price = film.getPrix();
        if (ligneCommande == null) {
            ligneCommande = getCommande().addCommandeAndLigneCommande(film, quantite, price);
            if (!lignesCommandes.contains(ligneCommande)) {
                lignesCommandes.add(ligneCommande);
            }
        } else {
            getCommande().addCommande(ligneCommande, quantite, price);
        }
    }

    public void updateligneCommande(LigneCommande LigneCommande, int quantity) {
        double price = LigneCommande.getFilm().getPrix();
        getCommande().updateCommandeAndUpdateLigneCommande(LigneCommande, quantity, price);
    }

    public void deleteligneCommande(long ligneCommandeId) {
        Collection<LigneCommande> ligneCommandeListTest = new ArrayList<LigneCommande>();
        for (Iterator<LigneCommande> it = lignesCommandes.iterator(); it.hasNext();) {
            LigneCommande LigneCommande = it.next();
            if (LigneCommande.getId() == ligneCommandeId) {
                ligneCommandeListTest.add(LigneCommande);
            }
        }
        lignesCommandes.removeAll(ligneCommandeListTest);
    }

    public Collection<LigneCommande> getligneCommandeList() {
        return lignesCommandes;
    }

    public double getTotalPriceLineItemList() {
        double totlalPrice = 0;
        for (Iterator<LigneCommande> it = lignesCommandes.iterator(); it.hasNext();) {
            LigneCommande LigneCommande = it.next();
            totlalPrice = totlalPrice + LigneCommande.getTotal();
        }
        return totlalPrice;
    }

    public void setLineItemList(Collection<LigneCommande> lineItemList) {
        this.lignesCommandes = lignesCommandes;
    }

    public LigneCommande getligneCommandeByFilm(int filmId) {
        LigneCommande ligneCommande = null;
        if ((lignesCommandes != null) && (!lignesCommandes.isEmpty())) {
            for (Iterator<LigneCommande> it = lignesCommandes.iterator(); it.hasNext();) {
                LigneCommande ligne = it.next();
                if (ligne.getFilm().getId() == filmId) {
                    ligneCommande = ligne;
                }
            }
        }
        return ligneCommande;
    }

    public Commande getCommande() {
        if (commande == null) {
            commande = new Commande();
        }
        return commande;
    }

}
